// Ts 中的类

// 修饰符
//  public， protect， private

// demo
class Point {
  x: number;
  y: number;
  constructor(x: number, y: number) {
    this.x = x;
    this.y = y;
  }
  getPosition() {
    return this.x;
  }
}

// 抽象类用于 被类 继承
abstract class People1 {
  constructor(public name: string) {} // 注意：抽象类可以有自己的构造函数
  abstract printName(): void;
}
// 抽象方法
class Man extends People1 {
  constructor(name: string) {
    super(name);
    this.name = name;
  }
  printName() {
    console.log('test');
  }
}

// 抽象存取器
abstract class People2 {
  abstract _name: string;
  abstract get name(): string;
  abstract set name(value); // 设置属性不能有 返回值 ，void也不行
}

class p extends People2 {
  public _name: string;
  name: string;
}

// 1. 用接口 规范类
interface Food {
  type: string;
  name: string;
}
class FoodClass implements Food {
  type: string;
  name: string;
}

// 2.泛型中使用类类型
const create = <T>(c: new () => T): T => {
  return new c();
};
class Inof {
  age: number;
}
create(Inof);
